package offset_gaobo.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import offset_gaobo.Offset;

import java.util.List;

/**
 * @author leechenxiang
 * @version V1.0
 * @Title: JsonUtils.java
 * @Package com.lee.utils
 * @Description: JSON/对象转换类
 * Copyright: Copyright (c) 2016
 * Company:Nathan.Lee.Salvatore
 * @date 2016年4月29日 下午11:05:03
 */
public class JsonUtils {

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 将对象转换成json字符串。
     * <p>Title: pojoToJson</p>
     * <p>Description: </p>
     *
     * @param data
     * @return Offset offset = new Offset();
     * offset.setTopic("offsetTopic");
     * offset.setPartition("0");
     * offset.setFrom("100");
     * offset.setUntil("200");
     * <p>
     * {"topic":"offsetTopic","partition":"0","from":"100","until":"200"}
     */
    public static String objectToJson(Object data) {
        try {
            String string = MAPPER.writeValueAsString(data);
            return string;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将json结果集转化为对象
     *
     * @param jsonData json数据
     * @param beanType    对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将json数据转换成pojo对象list
     * <p>Title: jsonToList</p>
     * <p>Description: </p>
     *
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            List<T> list = MAPPER.readValue(jsonData, javaType);
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }


    public static void main(String[] args) {
        Offset offset = new Offset();
        offset.setTopic("offsetTopic");
        offset.setPartition("0");
        offset.setFrom("100");
        offset.setUntil("200");

        System.out.println(objectToJson(offset));

        String str = "{\"topic\":\"offsetTopic\",\"partition\":\"0\",\"from\":\"100\",\"until\":\"200\"}";
        Offset offset1 = jsonToPojo(str, Offset.class);

        int a = 1;



    }

}
